# utils/jwt_util.py

import jwt
import time
from typing import Optional, Dict, Any

# 配置
SECRET_KEY = "666"  # 密钥（与Java端一致）
EXPIRATION = 1800  # 过期时间（单位：秒），与Java端一致为30分钟


def create_token(user: Dict[str, Any]) -> str:
    """
    生成 JWT Token
    :param user: 用户信息字典，至少包含 userid、username、password
    :return: token 字符串
    """
    current_time = int(time.time())

    payload = {
        "user_id": user.get("userid") or user.get("user_id"),  # 支持不同命名方式
        "userName": user.get("username"),
        "password": user.get("password"),
        "iat": current_time,  # 签发时间
        "exp": current_time + EXPIRATION  # 过期时间
    }

    token = jwt.encode(
        payload=payload,
        key=SECRET_KEY,
        algorithm="HS256"
    )
    return token


def verify_token(token: str) -> Optional[Dict[str, Any]]:
    """
    验证并解析 JWT Token
    :param token: token字符串
    :return: 解析后的用户信息或 None（失败时）
    """
    try:
        decoded_jwt = jwt.decode(
            jwt=token,
            key=SECRET_KEY,
            algorithms=["HS256"]
        )
        return decoded_jwt
    except jwt.ExpiredSignatureError:
        print("Token 已过期")
        return None
    except jwt.InvalidTokenError as e:
        print(f"无效 Token: {e}")
        return None